package com.xyzk.diagnose.entity;

import android.content.IntentFilter;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import com.xyzk.diagnose.tools.Common;
import com.xyzk.diagnose.tools.Commonfunc;
import com.xyzk.diagnose.tools.FileReader;

public class Cartype {
	public byte [] vin = new byte[17];
	public byte [] pin = new byte[4];
	public byte [] esk = new byte[16];
	public byte [] time = new byte[4];
	public byte [] peps = new byte[3];
	public byte [] tpms = new byte[16];
	public String heat= new String();
	public String battary= new String();
	public String ems = new String();
	public String tcufile = new String();
	public byte [] byteConfig;
	public int result;          //检测结果
	public int OptMode = 0;	//返修模式是否启用
	public String car;          //CAR类型,如A101,S01
	public String cartype;      //车型配置 ,如尊贵型
	public String name;         //car+cartype
	public String carDirectory; //TSDLEOL/Zotye/A12/
	public String flashDirectory;  //刷写文件目录
//	public String box_serialnum = null;	//box序列号
//	public String box_version = null;	//box版本号
	public String start_time = null;	//起始时间
	public String end_time = null;		//结束时间
	public String date = null;		//刷写时间
	public String config;	    //配置代码
	public String mcuRConfig;	//后电机码
	public String mcuFConfig;	//前电机码
	public String system;	    //系统
	private ArrayList<String> stations = new ArrayList<String>();//工位列表
	private ArrayList<String> moduleListFilter = new ArrayList<String>();//过滤SHW
	private ArrayList<String> moduleList = new ArrayList<String>();//未过滤SHW
	private Map<String,Integer> map = new HashMap<String,Integer>();
	private Map<String,byte[]> writeConfig = new HashMap<String,byte[]>();
	private Map<String,Can> can = new HashMap<String, Can>();
	public CheryMesInfo mesinfo = null;
	HashMap<String, String> map_ver_str = null; //版本信息
	private static Cartype c;

	private Cartype() {
		map_ver_str = new HashMap<String, String>();
	}

	public static Cartype getInstance(){
		return c == null ? c = new Cartype() : c;
	}

	/**
	 * 设置车辆有的模块
	 * @param car 根据cartype.ini获取模块就传入-1,
	 *  解析码或配置码解析,则传对应车型下标
	 */
	public boolean initCartype(String car, String... cartype) {
		clearCarInfo();
		name = car;
		if(cartype.length > 0){//如果没有传入，就表示没有尊贵型这类选项
			this.cartype = cartype[0];//尊贵型
			name += "-" + cartype[0];
		}
		this.car = car;
		carDirectory = Common.GUEST + car + "/" ;
		flashDirectory = Common.GUEST + "FLASH" + "/" ;
		//获取时间字节数组
		Commonfunc.hexStringToBytes(Commonfunc.getDate(""), time);
		//初始化模块
		return initModuleForConfig();
	}

	/**
	 * 根据配置码解析模块
	 */
	private boolean initModuleForConfig(){
		byteConfig = new byte[config.length()/2];
		Commonfunc.hexStringToBytes(config, byteConfig);
		if(car.equals("Q22_IRAQ")){
			if(config.length() != 16) return false;
			map.put("EMS", 1);
		}else if(car.equals("Q22_2020")){
			if(config.length() != 16) return false;
			map.put("EMS", 1);
			map.put("ABM", (byteConfig[0]) & 0x01);
			map.put("EPS", (byteConfig[0] >> 2) & 0x01);
			map.put("ABS", (byteConfig[0] >> 4) & 0x01);
		}else if(car.equals("Q22国六")){
			if(config.length() != 16) return false;
			map.put("EMS", 1);
			map.put("ABM", (byteConfig[0]) & 0x01);
			map.put("EPS", (byteConfig[0] >> 2) & 0x01);
			map.put("ABS", (byteConfig[0] >> 4) & 0x01);
		}else if(car.equals("Q22LEV")){
			if(config.length() != 16) return false;
			map.put("BMS", 1);
			map.put("VCU", 1);
			map.put("MCU", 1);
			map.put("BCM", 1);
			map.put("ABM", (byteConfig[0]) & 0x01);
			map.put("EPS", (byteConfig[0] >> 2) & 0x01);
			map.put("TBOX", (byteConfig[3] >> 5) & 0x01);
		}else if(car.equals("KQ92") || car.equals("KQ93")){
			if(config.length() != 16) return false;
			map.put("EMS", 1);
			map.put("EPS",(byteConfig[0] >> 2) & 0x01);
			map.put("ABS", (byteConfig[0] >> 4) & 0x01);
			map.put("BCM", (byteConfig[1] >> 6) & 0x01);
		}else if(car.equals("KM23")){
			if(config.length() != 16) return false;
			map.put("EMS", 1);
			map.put("ICM", 1);
			map.put("BCM", 1);//集成于PEPS
			map.put("ABM", (byteConfig[0]) & 0x01);
			map.put("IMMO",(byteConfig[0] >> 1) & 0x01);
			map.put("EPS", (byteConfig[0] >> 2) & 0x01);
			map.put("TCM", (byteConfig[0] >> 3) & 0x01);
			map.put("ABS", (byteConfig[0] >> 4) & 0x01);
			map.put("ESP", (byteConfig[0] >> 5) & 0x01);
			map.put("EPB", (byteConfig[0] >> 6) & 0x01);
			map.put("TPMS",(byteConfig[1]) & 0x01);
			map.put("RRM", (byteConfig[1] >> 1) & 0x01);
			map.put("APM", (byteConfig[1] >> 4) & 0x01);
			map.put("PLG",(byteConfig[2] >> 3) & 0x01);
			map.put("PEPS", (byteConfig[3] >> 7) & 0x01);
			map.put("BM", (byteConfig[3] >> 5) & 0x01);
			byte [] ABS = new byte[1];
			ABS[0] = (byte) ((byteConfig[6] >> 1) & 0x0F);
			writeConfig.put("ABS", ABS);
		}else if(car.equals("KL33EV")){
			if(config.length() != 16) return false;
			map.put("ABM", (byteConfig[0]) & 0x01);
			map.put("IMMO",(byteConfig[0] >> 1) & 0x01);
			map.put("EPS", (byteConfig[0] >> 2) & 0x01);
			map.put("TCM", (byteConfig[0] >> 3) & 0x01);
			map.put("ABS", (byteConfig[0] >> 4) & 0x01);
			map.put("ESP", (byteConfig[0] >> 5) & 0x01);
			map.put("EPB", (byteConfig[0] >> 6) & 0x01);
			map.put("BCM", 1);
			map.put("VCU", 1);
			map.put("TBOX", 1);
			map.put("MCU", 1);
			map.put("BMS", 1);
			map.put("PDU", 1);
			map.put("ACM", 1);
			map.put("DCDC", 1);
		} else if (car.equals("CX62")) {
			if(config.length() != 16) return false;
			map.put("EMS", 1);
			if(ems != null && ems.length() > 10)
			{
				if(ems.indexOf("90000000") > 0)
					map.put("EMS刷写", 3);
				else if(ems.indexOf("80080000") > 0)
					map.put("EMS刷写", 4);
				else if(ems.indexOf("80020000") > 0)
					map.put("EMS刷写", 2);
				else
					map.put("EMS刷写", 1);
			}
			if(((byteConfig[3] >> 5) & 0x01) == 1){//蓝牙不存在 则是集成BCM
				map.put("BCM", 2);
			}else{//单独BCM
				map.put("BCM", 1);
			}
			if(((byteConfig[2] >> 5)&0x07) == 0x05)  //青山 一代
				map.put("TCU刷写",1);
			else if (((byteConfig[2] >> 5)&0x07) == 0x07) {  //青山 二代
				map.put("TCU刷写",1);
			}else if (((byteConfig[2] >> 5)&0x07) == 0x03) {  // 6DCT  湿式
				 map.put("TCU刷写",2);
			}
			map.put("ICM", 1);
			map.put("ABM", (byteConfig[0]) & 0x01);
			map.put("IMMO",(byteConfig[0] >> 1) & 0x01);
			map.put("EPS", (byteConfig[0] >> 2) & 0x01);
			map.put("TCM", (byteConfig[0] >> 3) & 0x01);
			map.put("TCU", (byteConfig[0] >> 3) & 0x01);
			map.put("ABS", (byteConfig[0] >> 4) & 0x01);
			map.put("ESP", (byteConfig[0] >> 5) & 0x01);
			map.put("EPB", ((byteConfig[0] >> 6) & 0x01) & (~((byteConfig[6] >> 1) & 0x01)));
			map.put("TPMS", (byteConfig[1] >> 0) & 0x01);
			map.put("RRM", (byteConfig[1] >> 1) & 0x01);

			map.put("EGSM",(byteConfig[7] >> 7) & 0x01);
			map.put("GBC", (byteConfig[1] >> 7) & 0x01);
			map.put("GSM", (byteConfig[2]) & 0x01);

			map.put("PLG", (byteConfig[2] >> 3) & 0x01);
			map.put("BM", (byteConfig[3] >> 5) & 0x01);
			map.put("PEPS", (byteConfig[3] >> 7) & 0x01);
			map.put("TBOX", (byteConfig[5] >> 5) & 0x01);
			if(((byteConfig[5] >> 1) & 0x0F) > 0)
				map.put("RADAR",1);
			//map.put("AVM", (byteConfig[7] >> 2) & 0x01);
			map.put("BSD_L", byteConfig[7] >> 5 & 0x01);
			map.put("BSD_R", byteConfig[7] >> 5 & 0x01);
			map.put("BSD", byteConfig[7] >> 5 & 0x01);
			map.put("FCW", byteConfig[7] >> 6 & 0x01);
//			map.put("IPM", (byteConfig[7] >> 7) & 0x01);

			if(((byteConfig[7] >> 3) & 0x01) == 1){//独立APM
				map.put("APM", 1);
			}else if(((byteConfig[1] >> 4) & 0x01) == 1){//集成BCM
				map.put("APM", 2);
			}
		} else if (car.equals("T1NFL1")) {
			if(config.length() != 334) return false;
			map.put("EMS", 1);
			if(ems != null && ems.length() > 10)
			{
				if(ems.indexOf("90000000") > 0)
					map.put("EMS刷写", 3);
				else if(ems.indexOf("80080000") > 0)
					map.put("EMS刷写", 4);
				else if(ems.indexOf("80020000") > 0)
					map.put("EMS刷写", 2);
				else
					map.put("EMS刷写", 1);
			}
			//map.put("BCM", 1);
			if(((byteConfig[165] >> 5)&0x07) == 0x05)  //青山 一代
				map.put("TCU刷写",1);
			else if (((byteConfig[165] >> 5)&0x07) == 0x07) {  //青山 二代
				map.put("TCU刷写",1);
			}else if (((byteConfig[165] >> 5)&0x07) == 0x03) {  // 6DCT  湿式
				map.put("TCU刷写",2);
			}
			//map.put("ICM", 1);

			//1210后
			map.put("ESP", byteConfig[151] >> 2 & 0x01);
			map.put("EPB", byteConfig[151] >> 3 & 0x01);
			map.put("EPB_TYPE", byteConfig[151] >> 4 & 0x01);
			map.put("EPS", byteConfig[151] >> 7 & 0x01);
			if((byteConfig[152] >> 3 & 0x01) == 1) {
				map.put("RFR", byteConfig[152] >> 3 & 0x01);
				map.put("BCM",0);
			}
			else
				map.put("BCM",1);
			map.put("BSD", byteConfig[152] >> 4 & 0x01);
			map.put("ICM", byteConfig[152] >> 5 & 0x01);
			map.put("RBCM", byteConfig[152] >> 6 & 0x01);
			map.put("PCL", byteConfig[153] >> 0 & 0x01);
			map.put("ABM", byteConfig[153] >> 1 & 0x01);
			map.put("SAS", byteConfig[153] >> 2 & 0x01);
			map.put("GSM", byteConfig[153] >> 3 & 0x01);
			map.put("WCM", byteConfig[153] >> 6 & 0x01);
			map.put("MFSL", byteConfig[154] >> 0 & 0x01);
			map.put("IHU", byteConfig[154] >> 2 & 0x01);
			map.put("RADAR", byteConfig[154] >> 7 & 0x01);
			map.put("TPMS", byteConfig[155] >> 1 & 0x01);
			map.put("GBC", byteConfig[155] >> 5 & 0x01);
			map.put("EGSM", byteConfig[155] >> 6 & 0x01);
			map.put("DSM", byteConfig[155] >> 7 & 0x01);
			map.put("IMMO", byteConfig[157] >> 2 & 0x01);
			map.put("APM", byteConfig[157] >> 3 & 0x01);
			map.put("PEPS", byteConfig[157] >> 6 & 0x01);
			map.put("MFSR", byteConfig[157] >> 7 & 0x01);
			map.put("GLONASS", byteConfig[158] >> 5 & 0x01);
			map.put("ECALL", byteConfig[158] >> 6 & 0x01);
			map.put("FIPM", byteConfig[159] >> 2 & 0x01);
			if((byteConfig[160] >> 1 & 0x01) == 1)//独立APM
				map.put("AVM", 1);
			else
				map.put("AVM", 2);
			map.put("ABS", byteConfig[160] >> 2 & 0x01);
		}else if(car.equals("KX63FL")){
			if(config.length() != 16) return false;
			map.put("EMS", 1);
			if(((byteConfig[3] >> 5) & 0x01) == 1){//蓝牙不存在 则是集成BCM
				map.put("BCM", 2);
			}else{//单独BCM
				map.put("BCM", 1);
			}
			if(((byteConfig[2] >> 5)&0x07) == 0x05)  //青山 一代
				map.put("TCU刷写",1);
			else if (((byteConfig[2] >> 5)&0x07) == 0x07) {  //青山 二代
				map.put("TCU刷写",1);
			}
			map.put("EMS刷写", 1);
			if(ems != null && ems.length() > 10)
			{
				if(ems.indexOf("90000000") > 0)
					map.put("EMS刷写", 3);
				else if(ems.indexOf("80080000") > 0)
					map.put("EMS刷写", 4);
				else if(ems.indexOf("80020000") > 0)
					map.put("EMS刷写", 2);
				else
					map.put("EMS刷写", 1);
			}
			map.put("ICM", 1);
			map.put("ABM", (byteConfig[0]) & 0x01);
			map.put("IMMO",(byteConfig[0] >> 1) & 0x01);
			map.put("EPS", (byteConfig[0] >> 2) & 0x01);
			map.put("TCM", (byteConfig[0] >> 3) & 0x01);
			map.put("TCU", (byteConfig[0] >> 3) & 0x01);
			map.put("ABS", (byteConfig[0] >> 4) & 0x01);
			map.put("ESP", (byteConfig[0] >> 5) & 0x01);
			map.put("EPB", ((byteConfig[0] >> 6) & 0x01) & (~((byteConfig[6] >> 1) & 0x01)));
			map.put("TPMS", (byteConfig[1] >> 0) & 0x01);
			map.put("RRM", (byteConfig[1] >> 1) & 0x01);
			map.put("GBC", (byteConfig[1] >> 7) & 0x01);
			map.put("GSM", (byteConfig[2]) & 0x01);
			map.put("PLG", (byteConfig[2] >> 3) & 0x01);
			map.put("BM", (byteConfig[3] >> 5) & 0x01);
			map.put("PEPS", (byteConfig[3] >> 7) & 0x01);
			map.put("TBOX", (byteConfig[5] >> 5) & 0x01);
			if(((byteConfig[5] >> 1) & 0x0F) > 0)
				map.put("RADAR",1);
			map.put("AVM", (byteConfig[7] >> 2) & 0x01);
			map.put("BSD_L", byteConfig[7] >> 5 & 0x01);
			map.put("BSD_R", byteConfig[7] >> 5 & 0x01);
			map.put("BSD", byteConfig[7] >> 5 & 0x01);
			map.put("FCW", byteConfig[7] >> 6 & 0x01);
			map.put("IPM", (byteConfig[7] >> 7) & 0x01);

			if(((byteConfig[7] >> 3) & 0x01) == 1){//独立APM
				map.put("APM", 1);
			}else if(((byteConfig[1] >> 4) & 0x01) == 1){//集成BCM
				map.put("APM", 2);
			}
		}else if(car.equals("CX62B")){
			if(config.length() != 64) return false;
			map.put("BCM", 1);
			map.put("EMS", 1);
			map.put("EMS刷写", 1);
			if(ems != null && ems.length() > 10)
			{
				if(ems.indexOf("90000000") > 0)
					map.put("EMS刷写", 3);
				else if(ems.indexOf("80080000") > 0)
					map.put("EMS刷写", 4);
				else if(ems.indexOf("80020000") > 0)
					map.put("EMS刷写", 2);
				else
					map.put("EMS刷写", 1);
			}
			map.put("ABM", (byteConfig[0]) & 0x01);
			map.put("IMMO",(byteConfig[0] >> 1) & 0x01);
			map.put("EPS", (byteConfig[0] >> 2) & 0x01);
			map.put("TCM", (byteConfig[0] >> 3) & 0x01);
			map.put("TCU", (byteConfig[0] >> 3) & 0x01);
			if(((byteConfig[0] >> 3) & 0x01) == 1)
			{
				if(((byteConfig[2] >> 5)&0x07) == 0x06) //6DCT
				{
					map.put("TCU",2);
				}
				if(((byteConfig[2] >> 5)&0x07) == 0x06)  //6DCT
					map.put("TCU刷写",2);
				else if(((byteConfig[23] >> 3)&0x07) == 0x00)  //青山
					map.put("TCU刷写",1);
				else if(((byteConfig[23] >> 3)&0x07) == 0x02)  //上汽齿2.0+7DCT
				{
					map.put("TCU刷写", 3);
					map.put("TCU",3);
				}
			}
			map.put("ABS", (byteConfig[0] >> 4) & 0x01);
			map.put("ABS-CONFIG", (byteConfig[0] >> 4) & 0x01);
			map.put("ESP", (byteConfig[0] >> 5) & 0x01);
			//map.put("EPB", ((byteConfig[0] >> 6) & 0x01) & ((byteConfig[6] >> 1) & 0x01));
			if(((byteConfig[6] >> 1) & 0x01) == 0)
				map.put("EPB",1);
			map.put("TPMS", (byteConfig[1] >> 0) & 0x01);
			map.put("IHU", ((byteConfig[1] >> 1) & 0x01) + 1);
			map.put("GBC", (byteConfig[1] >> 7) & 0x01);
			map.put("GSM", (byteConfig[2]) & 0x01);
			map.put("PLG", (byteConfig[2] >> 3) & 0x01);
			map.put("WCM", (byteConfig[3] >> 4) & 0x01);
			map.put("BM", (byteConfig[3] >> 5) & 0x01);
			map.put("PEPS", (byteConfig[3] >> 7) & 0x01);
			map.put("TBOX", (byteConfig[5] >> 5) & 0x01);
			map.put("AVM", (byteConfig[7] >> 2) & 0x01);
			if(((byteConfig[7] >> 3) & 0x01) == 1){//独立APM
				map.put("APM", 2);
			}else if(((byteConfig[1] >> 4) & 0x01) == 1){//集成BCM
				map.put("APM", 1);
			}
			map.put("BSD_L", byteConfig[7] >> 5 & 0x01);
			map.put("BSD_R", byteConfig[7] >> 5 & 0x01);
			map.put("BSD", byteConfig[7] >> 5 & 0x01);
			if((((byteConfig[7] >> 5) & 0x01) == 1) && (((byteConfig[25] >> 6) & 0x01) == 1))
				map.put("BSD-CONFIG",0x01);
			map.put("FWS",(byteConfig[7] >> 6) & 0x01);
			map.put("CEM",(byteConfig[7] >> 7) & 0x01);
			map.put("APA", ((byteConfig[8] >> 6)&0x01));
			if (((byteConfig[8] >> 6)&0x01)==0x01){
				map.put("RADAR",0);
			}else map.put("RADAR",1);
			map.put("FRM", (byteConfig[9] >> 4) & 0x01 );
			map.put("FCM", (byteConfig[9] >> 5) & 0x01);
			map.put("CLM", (byteConfig[9] >> 6) & 0x01);
			map.put("FIPM", (byteConfig[9] >> 7) & 0x01);
			map.put("RIPM", (byteConfig[10]) & 0x01);
			map.put("DVR", (byteConfig[10] >> 1) & 0x01);
			map.put("CGW", (byteConfig[10] >> 2) & 0x01);
			map.put("AMP", (byteConfig[10] >> 3) & 0x01);
			map.put("ICM", (byteConfig[10] >> 4) & 0x01);
			map.put("WCM(50W)",(byteConfig[16] >> 0) & 0x01);
			map.put("GLONASS", (byteConfig[16] >> 7) & 0x01);
			map.put("SEAT", (byteConfig[17] >> 2) & 0x01);
			byte [] TCM = new byte[1];
			TCM[0] = byteConfig[11];
			writeConfig.put("TCM", TCM);
			writeConfig.put("TCU", TCM);
			map.put("HAVM", (byteConfig[19] >> 0) & 0x01);
			map.put("DCDC",(byteConfig[19] >> 1 ) & 0x01);
			map.put("BSG",(byteConfig[19] >> 2 ) & 0x01);
			map.put("BMS",(byteConfig[19] >> 3 ) & 0x01);
			map.put("EGSM",(byteConfig[19] >> 7) & 0x01);
			map.put("EBS",(byteConfig[20] >> 0) & 0x01);
			map.put("RBCM",(byteConfig[26] >> 2) & 0x01);
			map.put("ECALL",(byteConfig[28] >> 2) & 0x01);
			if((((byteConfig[28] >> 3) & 0x01) == 1) && (((byteConfig[2] >> 0) & 0x01) == 1))
				map.put("GSM-CONFIG",0x01);

		}else if (car.equals("T1NPHEV")){
			if(config.length() != 167*2) return false;
			map.put("TCU",(byteConfig[151]) & 0x01);
			map.put("TCU刷写",(byteConfig[151]) & 0x01);
			map.put("EMS",(byteConfig[151] >> 1) & 0x01);
			//if(ems.indexOf("80080000") > 0)
				map.put("EMS刷写",1);
			//else if(ems.indexOf("9000000") > 0)
				//map.put("EMS刷写",3);
			//else

			map.put("ESP",(byteConfig[151] >> 2) & 0x01);
			map.put("EPB",(byteConfig[151] >> 3) & 0x01);
			map.put("EPB-Type",(byteConfig[151] >> 4) & 0x01);
			if(((byteConfig[159] >> 3) & 0x01) == 1)
			{
					map.put("TCU",2);
					map.put("TCU刷写",2);
			}
			map.put("AWD",(byteConfig[151] >> 5) & 0x01);
			map.put("eLSD",(byteConfig[151] >> 6) & 0x01);
			map.put("EPS",(byteConfig[151] >> 7) & 0x01);
			if (((byteConfig[156] >> 5) & 0x01)== 0x01){
				if (((byteConfig[156] >> 1) & 0x01)== 0x01){
					map.put("ESP",1);
				}else if (((byteConfig[156] >> 1) & 0x01)== 0x00){
					map.put("ESP",2);
				}
			}
			//152
			map.put("APA",(byteConfig[152] >> 0) & 0x01);
			map.put("FCM",(byteConfig[152] >> 1) & 0x01);
			map.put("FRM",(byteConfig[152] >> 2) & 0x01);
			map.put("RFR",(byteConfig[152] >> 3) & 0x01);
			map.put("BSD",(byteConfig[152] >> 4) & 0x01);
			map.put("ICM",(byteConfig[152] >> 5) & 0x01);
			map.put("RBCM",(byteConfig[152] >> 6) & 0x01);
			map.put("LC",(byteConfig[152] >> 7) & 0x01);
			//153
			map.put("PCL",(byteConfig[153] >> 0) & 0x01);
			map.put("PLG",(byteConfig[153] >> 0) & 0x01);
			map.put("ABM",(byteConfig[153] >> 1) & 0x01);
			map.put("SAS",(byteConfig[153] >> 2) & 0x01);
			map.put("GSM",(byteConfig[153] >> 3) & 0x01);
			map.put("MSB",(byteConfig[153] >> 4) & 0x01);
			map.put("ERM",(byteConfig[153] >> 5) & 0x01);
			map.put("WCM",(byteConfig[153] >> 6) & 0x01);
			map.put("DWD",(byteConfig[153] >> 7) & 0x01);
			//154
			map.put("MFS",(byteConfig[154] >> 0) & 0x01);
			map.put("AMP",(byteConfig[154] >> 1) & 0x01);
			map.put("IHU",(byteConfig[154] >> 2) & 0x01);
			map.put("ATCM",(byteConfig[154] >> 3) & 0x01);
			map.put("SEAF",(byteConfig[154] >> 4) & 0x01);
			map.put("CEM",(byteConfig[154] >> 5) & 0x01);
			map.put("EBS",(byteConfig[154] >> 6) & 0x01);
			map.put("RADAR",(byteConfig[154] >> 7) & 0x01);
			if(((byteConfig[154] >> 7) & 0x01) == 0x01)
			{
				if(map.get("APA") <= 0)
					map.put("RADARCONFIG",1);
			}
			//155
			map.put("TBOX",(byteConfig[155] >> 0) & 0x01);
			map.put("TPMS",(byteConfig[155] >> 1) & 0x01);
			map.put("AVM",(byteConfig[155] >> 2) & 0x01);
			map.put("CLM",(byteConfig[155] >> 3) & 0x01);
			map.put("CGW",(byteConfig[155] >> 4) & 0x01);
			map.put("GBC",(byteConfig[155] >> 5) & 0x01);
			map.put("EGSM",(byteConfig[155] >> 6) & 0x01);
			map.put("DSM",(byteConfig[155] >> 7) & 0x01);
			//156
			map.put("HCU",(byteConfig[156] >> 0) & 0x01);
			map.put("CDU",(byteConfig[156] >> 1) & 0x01);
			map.put("MCUF",(byteConfig[156] >> 2) & 0x01);
			map.put("MCUR",(byteConfig[156] >> 3) & 0x01);
			map.put("BMS",(byteConfig[156] >> 4) & 0x01);
			map.put("PTC",(byteConfig[156] >> 5) & 0x01);
			map.put("EAC",(byteConfig[156] >> 6) & 0x01);
			map.put("AVAS",(byteConfig[156] >> 7) & 0x01);
			//157
			if(((byteConfig[157] >> 0) & 0x01) == 1)
				map.put("IHU", 2);
			else
				map.put("IHU", 1);
			map.put("WCBS",(byteConfig[157] >> 1) & 0x01);
			map.put("IMMO",(byteConfig[157] >> 2) & 0x01);
			map.put("APM",(byteConfig[157] >> 3) & 0x01);
				map.put("KEY",(byteConfig[157] >> 4) & 0x03);
			map.put("PEPS",(byteConfig[157] >> 6) & 0x01);
			map.put("MFSR",(byteConfig[157] >> 7) & 0x01);
			//158
			map.put("8AT",(byteConfig[158] >> 0) & 0x01);
			map.put("DSMM",(byteConfig[158] >> 1) & 0x01);
			map.put("PSMM",(byteConfig[158] >> 2) & 0x01);
			map.put("DHM",(byteConfig[158] >> 3) & 0x01);
			map.put("2.0TD",(byteConfig[158] >> 4) & 0x01);
			map.put("GLONASS",(byteConfig[158] >> 5) & 0x01);
			map.put("ECALL",(byteConfig[158] >> 6) & 0x01);
			//map.put("CLM",(byteConfig[158] >> 7) & 0x01);
			//159
			map.put("ZDC",(byteConfig[159] >> 0) & 0x01);
			map.put("EBS",(byteConfig[159] >> 1) & 0x01);
			map.put("FIPM",(byteConfig[159] >> 2) & 0x01);
			map.put("DVR",(byteConfig[160] >> 5) & 0x01);

		} else if (car.equals("T1PPHEV")) {
			if(config.length() != 334) return false;
			map.put("PEPS",1);
			if(((byteConfig[151] >> 0) & 0x01) == 1)
			{
				map.put("TCU",2);
				map.put("TCU刷写",2);
			}
			map.put("EMS",(byteConfig[151]>>1) & 0x01);
			map.put("EMS刷写",(byteConfig[151]>>1) & 0x01);
			map.put("ECU刷写",(byteConfig[151]>>1) & 0x01);
			map.put("ESP",(byteConfig[151]>>2) & 0x01);
			if (((byteConfig[151]>>2) & 0x01)==0x01){
				if (((byteConfig[151]>>4) & 0x01) ==0x00){
					map.put("EPB",1);
				}
			}
			map.put("AWD",(byteConfig[151]>>5) & 0x01);
			map.put("EPS",(byteConfig[151]>>7) & 0x01);
			map.put("APA",(byteConfig[152]) & 0x01);

			if (((byteConfig[152]>>1) & 0x01)==0x01){
				map.put("FCM",1);
				map.put("FCM刷写",1);
			}
			if (((byteConfig[152]>>2) & 0x01)==0x01){
				map.put("FRM",1);
				map.put("FRM刷写",1);
			}
			map.put("RFR",(byteConfig[152]>>3) & 0x01);
			map.put("BSD",(byteConfig[152]>>4) & 0x01);
			map.put("ICM",(byteConfig[152]>>5) & 0x01);
			map.put("RBCM",(byteConfig[152]>>6) & 0x01);
			map.put("LC",(byteConfig[152]>>7) & 0x01);
			map.put("PLG",(byteConfig[153]) & 0x01);
			map.put("ABM",(byteConfig[153]>>1) & 0x01);
			map.put("SAS",(byteConfig[153]>>2) & 0x01);
			map.put("GSM",(byteConfig[153]>>3) & 0x01);
			map.put("MSB",(byteConfig[153]>>4) & 0x01);
			map.put("ERM",(byteConfig[153]>>5) & 0x01);
			map.put("WCM",(byteConfig[153]>>6) & 0x01);
			map.put("DWD",(byteConfig[153]>>7) & 0x01);
			map.put("MFS",(byteConfig[154]) & 0x01);
			map.put("AMP",(byteConfig[154]>>1) & 0x01);
			map.put("IHU",(byteConfig[154]>>2) & 0x01);
			map.put("ATCM",(byteConfig[154]>>3) & 0x01);
			map.put("SEAF",(byteConfig[154]>>4) & 0x01);
			map.put("BDM",(byteConfig[154]>>5) & 0x01);
			map.put("EBS",(byteConfig[154]>>6) & 0x01);
			map.put("RADAR",(byteConfig[154]>>7) & 0x01);
			map.put("TBOX",(byteConfig[155]) & 0x01);
			map.put("TPMS",(byteConfig[155]>>1) & 0x01);
			map.put("AVM",(byteConfig[155]>>2) & 0x01);
			map.put("CLM",(byteConfig[155]>>3) & 0x01);
			map.put("CGM",(byteConfig[155]>>4) & 0x01);
			map.put("GBC",(byteConfig[155]>>5) & 0x01);
			map.put("EGSM",(byteConfig[155]>>6) & 0x01);
			map.put("DSM",(byteConfig[155]>>7) & 0x01);
			map.put("HCU",(byteConfig[156]) & 0x01);
			map.put("CDU",(byteConfig[156]>>1) & 0x01);
			map.put("MCUF",(byteConfig[156]>>2) & 0x01);
			map.put("MCUR",(byteConfig[156]>>3) & 0x01);
			map.put("BMS",(byteConfig[156]>>4) & 0x01);
			map.put("PTC",(byteConfig[156]>>5) & 0x01);
			map.put("EAC",(byteConfig[156]>>6) & 0x01);
			map.put("AVAS",(byteConfig[156]>>7) & 0x01);
		} else if (car.equals("T1PFL3")) {
			if(config.length() != 334) return false;
			map.put("PEPS",1);
			if (((byteConfig[151]) & 0x01)==1){
				if ((((byteConfig[165]>>2) & 0x01)+((byteConfig[165]>>3) & 0x01)+((byteConfig[165]>>4) & 0x01))==0){
					map.put("TCU",1);
				}
			}
			map.put("EMS",(byteConfig[151]>>1) & 0x01);
			/*if(ems != null)
			{
				if(ems.length() < 5)
					map.put("EMS刷写",0);
				else if(ems.indexOf("800400008027FFFF") > 0)
					map.put("EMS刷写",1);
				else
					map.put("EMS刷写",2);
			}
			else
				map.put("EMS刷写",0);*/
			if(ems != null && ems.length() > 10)
			{
				if(ems.indexOf("90000000") > 0)
					map.put("EMS刷写", 3);
				else if(ems.indexOf("80080000") > 0)
					map.put("EMS刷写", 4);
				else if(ems.indexOf("80020000") > 0)
					map.put("EMS刷写", 2);
				else
					map.put("EMS刷写", 1);
			}
			if(((byteConfig[165]>>2)&0x07) == 0) //1.6T
				map.put("1.6T",1);
			map.put("ESP",(byteConfig[151]>>2) & 0x01);
			if (((byteConfig[165]>>5 )&0x07)==0x06)
			map.put("TCU刷写",2);
			else if (((byteConfig[165]>>5 )&0x07)==0x05)
			{
				if(((byteConfig[165]>>2)&0x07) == 3 || ((byteConfig[165]>>2)&0x07) == 5)
					map.put("TCU刷写",3);
				else
					map.put("TCU刷写",1);
			}

			map.put("EPB",(byteConfig[151]>>3) & 0x01);
			map.put("AWD",(byteConfig[151]>>5) & 0x01);
			map.put("EPS",(byteConfig[151]>>7) & 0x01);
			map.put("APA",(byteConfig[152]) & 0x01);
			map.put("FCM",(byteConfig[152]>>1) & 0x01);
			map.put("FRM",(byteConfig[152]>>2) & 0x01);
			map.put("FRM刷写",(byteConfig[152] >> 2) & 0x01);
			map.put("FCM刷写",(byteConfig[152] >> 1) & 0x01);
			map.put("RFR",(byteConfig[152]>>3) & 0x01);
			map.put("BSD",(byteConfig[152]>>4) & 0x01);
			map.put("ICM",(byteConfig[152]>>5) & 0x01);
			map.put("RBCM",(byteConfig[152]>>6) & 0x01);
			map.put("LC",(byteConfig[152]>>7) & 0x01);
			map.put("PLG",(byteConfig[153]) & 0x01);
			map.put("ABM",(byteConfig[153]>>1) & 0x01);
			map.put("SAS",(byteConfig[153]>>2) & 0x01);
			map.put("GSM",(byteConfig[153]>>3) & 0x01);
			map.put("MSB",(byteConfig[153]>>4) & 0x01);
			map.put("ERM",(byteConfig[153]>>5) & 0x01);
			map.put("WCM",(byteConfig[153]>>6) & 0x01);
			map.put("DWD",(byteConfig[153]>>7) & 0x01);
			map.put("MFS",(byteConfig[154]) & 0x01);
			map.put("AMP",(byteConfig[154]>>1) & 0x01);
			if (((byteConfig[154]>>2)&0x01)==1){
				if (((byteConfig[157]>>0)&0x01)==0){
					map.put("IHU",1);//独立式
				}else {  //集成式
					map.put("IHU",2);//集成式
				}
			}
			map.put("ATCM",(byteConfig[154]>>3) & 0x01);
			map.put("SEAF",(byteConfig[154]>>4) & 0x01);
			map.put("BDM",(byteConfig[154]>>5) & 0x01);
			map.put("EBS",(byteConfig[154]>>6) & 0x01);
			map.put("RADAR",(byteConfig[154]>>7) & 0x01);
			map.put("TBOX",(byteConfig[155]) & 0x01);
			map.put("TPMS",(byteConfig[155]>>1) & 0x01);
			map.put("AVM",(byteConfig[155]>>2) & 0x01);
			map.put("CLM",(byteConfig[155]>>3) & 0x01);
			map.put("CGW",(byteConfig[155]>>4) & 0x01);
			map.put("GBC",(byteConfig[155]>>5) & 0x01);
			map.put("EGSM",(byteConfig[155]>>6) & 0x01);
			map.put("DSM",(byteConfig[155]>>7) & 0x01);

			map.put("IHU-Type",(byteConfig[157]>>0) & 0x01);

			map.put("GLONASS",(byteConfig[158]>>5) & 0x01);
			map.put("ECALL",(byteConfig[158]>>6) & 0x01);
			map.put("CGW8",(byteConfig[161]>>1) & 0x01);

		} else if(car.equals("KX63A")){
			if(config.length() != 64) return false;
			map.put("BCM", 1);
			map.put("EMS", 1);
			map.put("EMS刷写", 1);
			if(ems != null && ems.length() > 10)
			{
				if(ems.indexOf("90000000") > 0)
					map.put("EMS刷写", 3);
				else if(ems.indexOf("80080000") > 0)
					map.put("EMS刷写", 4);
				else if(ems.indexOf("80020000") > 0)
					map.put("EMS刷写", 2);
				else
					map.put("EMS刷写", 1);
			}
			map.put("IPM", (byteConfig[7] >> 7) & 0x01);
			map.put("ABM", (byteConfig[0]) & 0x01);
			map.put("IMMO",(byteConfig[0] >> 1) & 0x01);
			map.put("EPS", (byteConfig[0] >> 2) & 0x01);
			map.put("TCM", (byteConfig[0] >> 3) & 0x01);
			map.put("TCU", (byteConfig[0] >> 3) & 0x01);
			if(((byteConfig[2] >> 5) & 0x07) == 5)
				map.put("TCU", 0x02);
			if(((byteConfig[0] >> 3) & 0x01) == 0x01)
			{
				if(((byteConfig[2] >> 5)&0x07) == 0x05)  //青山
					map.put("TCU刷写",1);
			}
			map.put("ABS", (byteConfig[0] >> 4) & 0x01);
			map.put("ESP", (byteConfig[0] >> 5) & 0x01);
			map.put("EPB", ((byteConfig[0] >> 6) & 0x01) & ((byteConfig[6] >> 1) & 0x01));
			map.put("TPMS", (byteConfig[1] >> 0) & 0x01);
			map.put("RRM", (byteConfig[1] >> 1) & 0x01);
			map.put("GBC", (byteConfig[1] >> 7) & 0x01);
			map.put("GSM", (byteConfig[2]) & 0x01);
			if(((byteConfig[2] >> 1) & 0x03) > 0)
				map.put("DSM", 1);
			map.put("PLG", (byteConfig[2] >> 3) & 0x01);
			//二代方向盘
			map.put("MFSL", (byteConfig[3] >> 3) & 0x01);
			map.put("MFSR", (byteConfig[3] >> 3) & 0x01);
			map.put("WPC", (byteConfig[3] >> 4) & 0x01);
			map.put("BM", (byteConfig[3] >> 5) & 0x01);
			map.put("PEPS", (byteConfig[3] >> 7) & 0x01);
			map.put("ALM", (byteConfig[4] >> 5) & 0x01);
			map.put("TBOX", (byteConfig[5] >> 5) & 0x01);
			map.put("AVM", (byteConfig[7] >> 2) & 0x01);
			if(((byteConfig[7] >> 3) & 0x01) == 1){//独立APM
				map.put("APM", 1);
			}else if(((byteConfig[1] >> 4) & 0x01) == 1){//集成BCM
				map.put("APM", 2);
			}
			map.put("BSD_L", byteConfig[7] >> 5 & 0x01);
			map.put("BSD_R", byteConfig[7] >> 5 & 0x01);
			map.put("BSD", byteConfig[7] >> 5 & 0x01);
			map.put("FWS",(byteConfig[7] >> 6) & 0x01);
			map.put("BDM",(byteConfig[7] >> 7) & 0x01);
			map.put("APA", ((byteConfig[8] >> 6)&0x01));
			if(((byteConfig[5] >> 1) & 0x0F) > 0)
				map.put("RADAR", 1);
			else{
				map.put("RADAR", 0);
			}
			map.put("FRM", (byteConfig[9] >> 4) & 0x01 );
			map.put("FCM", (byteConfig[9] >> 5) & 0x01);
			map.put("FIPM", (byteConfig[9] >> 7) & 0x01);
			map.put("DVR", (byteConfig[10] >> 1) & 0x01);
			map.put("CGW", (byteConfig[10] >> 2) & 0x01);
			map.put("AMP", (byteConfig[10] >> 3) & 0x01);
			map.put("ICM", (byteConfig[10] >> 4) & 0x01);
			map.put("AFU", (byteConfig[12] >> 6) & 0x01);
			map.put("DMS", (byteConfig[13] >> 0) & 0x01);
			byte [] TCM = new byte[1];
			TCM[0] = byteConfig[11];
			writeConfig.put("TCM", TCM);
		} else if (car.equals("KX63FLB") ) {
			if(config.length() != 64) return false;
			map.put("BCM", 1);
			map.put("EMS", 1);
			map.put("EMS刷写", 1);
			if(ems != null && ems.length() > 10)
			{
				if(ems.indexOf("90000000") > 0)
					map.put("EMS刷写", 3);
				else if(ems.indexOf("80080000") > 0)
					map.put("EMS刷写", 4);
				else if(ems.indexOf("80020000") > 0)
					map.put("EMS刷写", 2);
				else
					map.put("EMS刷写", 1);
			}
			map.put("IPM", 1);
			map.put("ABM", (byteConfig[0]) & 0x01);
			map.put("IMMO",(byteConfig[0] >> 1) & 0x01);
			map.put("EPS", (byteConfig[0] >> 2) & 0x01);
			map.put("TCM", (byteConfig[0] >> 3) & 0x01);
			map.put("TCU", (byteConfig[0] >> 3) & 0x01);
			if(((byteConfig[2] >> 5) & 0x07) == 5)
				map.put("TCU", 0x02);
			if(((byteConfig[0] >> 3) & 0x01) == 0x01)
			{
				if(((byteConfig[2] >> 5)&0x07) == 0x05)  //7DCT
				{
					int ems = (byteConfig[6] >> 4)&0x0F;    ///0 -- 1.6T,1-- 1.5T国六；2 -- 1.5T; 3 -- 2.0T
					if(ems == 3)
						map.put("TCU刷写",3);
					else if(ems == 0)
						map.put("TCU刷写",1);
				}

			}
			map.put("ABS", (byteConfig[0] >> 4) & 0x01);
			map.put("ESP", (byteConfig[0] >> 5) & 0x01);
			map.put("EPB", ((byteConfig[0] >> 6) & 0x01) & ((byteConfig[6] >> 1) & 0x01));
			map.put("TPMS", (byteConfig[1] >> 0) & 0x01);
			map.put("RRM", (byteConfig[1] >> 1) & 0x01);
			map.put("GBC", (byteConfig[1] >> 7) & 0x01);
			map.put("GSM", (byteConfig[2]) & 0x01);
			if(((byteConfig[2] >> 1) & 0x03) > 0)
				map.put("DSM", 1);
			map.put("PLG", (byteConfig[2] >> 3) & 0x01);
			//二代方向盘
			map.put("MFSL", (byteConfig[3] >> 3) & 0x01);
			map.put("MFSR", (byteConfig[3] >> 3) & 0x01);
			map.put("WPC", (byteConfig[3] >> 4) & 0x01);
			map.put("BM", (byteConfig[3] >> 5) & 0x01);
			map.put("PEPS", (byteConfig[3] >> 7) & 0x01);
			map.put("ALM", (byteConfig[4] >> 5) & 0x01);
			map.put("TBOX", (byteConfig[5] >> 5) & 0x01);
			map.put("AVM", (byteConfig[7] >> 2) & 0x01);
			if(((byteConfig[7] >> 3) & 0x01) == 1){//独立APM
				map.put("APM", 1);
			}else if(((byteConfig[1] >> 4) & 0x01) == 1){//集成BCM
				map.put("APM", 2);
			}
			map.put("BSD_L", byteConfig[7] >> 5 & 0x01);
			map.put("BSD_R", byteConfig[7] >> 5 & 0x01);
			map.put("BSD", byteConfig[7] >> 5 & 0x01);
			map.put("FWS",(byteConfig[7] >> 6) & 0x01);
			map.put("BDM",(byteConfig[7] >> 7) & 0x01);
			map.put("APA", ((byteConfig[8] >> 6)&0x01));
			if(((byteConfig[5] >> 1) & 0x0F) > 0)
				map.put("RADAR", 1);
			else{
				map.put("RADAR", 0);
			}
			map.put("FRM", (byteConfig[9] >> 4) & 0x01 );
			map.put("FCM", (byteConfig[9] >> 5) & 0x01);
			map.put("FIPM", (byteConfig[9] >> 7) & 0x01);
			map.put("DVR", (byteConfig[10] >> 1) & 0x01);
			map.put("CGW", (byteConfig[10] >> 2) & 0x01);
			map.put("AMP", (byteConfig[10] >> 3) & 0x01);
			map.put("ICM", (byteConfig[10] >> 4) & 0x01);
			map.put("AFU", (byteConfig[12] >> 6) & 0x01);
			map.put("DMS", (byteConfig[13] >> 0) & 0x01);


			byte [] TCM = new byte[1];
			TCM[0] = byteConfig[11];
			writeConfig.put("TCM", TCM);
		} else if(car.equals("KX63FLB(2.0T)")){
			if(config.length() != 64) return false;
			map.put("BCM", 1);
			map.put("EMS", 1);
			map.put("EMS刷写", 1);
			if(ems != null && ems.length() > 10)
			{
				if(ems.indexOf("90000000") > 0)
					map.put("EMS刷写", 3);
				else if(ems.indexOf("80080000") > 0)
					map.put("EMS刷写", 4);
				else if(ems.indexOf("80020000") > 0)
					map.put("EMS刷写", 2);
				else
					map.put("EMS刷写", 1);
			}
			map.put("IPM", 1);
			map.put("ABM", (byteConfig[0]) & 0x01);
			map.put("IMMO",(byteConfig[0] >> 1) & 0x01);
			map.put("EPS", (byteConfig[0] >> 2) & 0x01);
			map.put("TCM", (byteConfig[0] >> 3) & 0x01);
			map.put("TCU", (byteConfig[0] >> 3) & 0x01);
			if(((byteConfig[2] >> 5) & 0x07) == 5)
				map.put("TCU", 0x02);
			if(((byteConfig[0] >> 3) & 0x01) == 0x01)
			{
				if(((byteConfig[2] >> 5)&0x07) == 0x05)  //7DCT
				{
					int ems = (byteConfig[6] >> 4)&0x0F;    ///0 -- 1.6T,1-- 1.5T国六；2 -- 1.5T; 3 -- 2.0T
					if(ems == 3)
						map.put("TCU刷写",3);
					else if(ems == 0)
						map.put("TCU刷写",1);
				}

			}
			map.put("ABS", (byteConfig[0] >> 4) & 0x01);
			map.put("ESP", (byteConfig[0] >> 5) & 0x01);
			map.put("EPB", ((byteConfig[6] >> 1) & 0x01));
			map.put("TPMS", (byteConfig[1] >> 0) & 0x01);
			map.put("RRM", (byteConfig[1] >> 1) & 0x01);
//			map.put("GBC", (byteConfig[1] >> 7) & 0x01);
			map.put("EGSM", (byteConfig[2]) & 0x01);
			if(((byteConfig[2] >> 1) & 0x03) > 0)
				map.put("DSM", 1);
			map.put("PLG", (byteConfig[2] >> 3) & 0x01);
			//二代方向盘
			map.put("MFSL", (byteConfig[3] >> 3) & 0x01);
			map.put("MFSR", (byteConfig[3] >> 3) & 0x01);
			map.put("WPC", (byteConfig[3] >> 4) & 0x01);
			map.put("BM", (byteConfig[3] >> 5) & 0x01);
			map.put("PEPS", (byteConfig[3] >> 7) & 0x01);
			map.put("ALM", (byteConfig[4] >> 5) & 0x01);
			map.put("TBOX", (byteConfig[5] >> 5) & 0x01);
			map.put("AVM", (byteConfig[7] >> 2) & 0x01);
			if(((byteConfig[7] >> 3) & 0x01) == 1){//独立APM
				map.put("APM", 1);
			}else if(((byteConfig[1] >> 4) & 0x01) == 1){//集成BCM
				map.put("APM", 2);
			}
			map.put("BSD_L", byteConfig[7] >> 5 & 0x01);
			map.put("BSD_R", byteConfig[7] >> 5 & 0x01);
			map.put("BSD", byteConfig[7] >> 5 & 0x01);
			map.put("FWS",(byteConfig[7] >> 6) & 0x01);
			map.put("BDM",(byteConfig[7] >> 7) & 0x01);
			map.put("APA", ((byteConfig[8] >> 6)&0x01));
			if(((byteConfig[5] >> 1) & 0x0F) > 0)
				map.put("RADAR", 1);
			else{
				map.put("RADAR", 0);
			}
			map.put("FRM", (byteConfig[9] >> 4) & 0x01 );
			map.put("FCM", (byteConfig[9] >> 5) & 0x01);
			map.put("FIPM", (byteConfig[9] >> 7) & 0x01);
			map.put("DVR", (byteConfig[10] >> 1) & 0x01);
			map.put("CGW", (byteConfig[10] >> 2) & 0x01);
			map.put("AMP", (byteConfig[10] >> 3) & 0x01);
			map.put("ICM", (byteConfig[10] >> 4) & 0x01);
			map.put("AFU", (byteConfig[12] >> 6) & 0x01);
			map.put("DMS", (byteConfig[13] >> 0) & 0x01);


			byte [] TCM = new byte[1];
			TCM[0] = byteConfig[11];
			writeConfig.put("TCM", TCM);
		} else if(car.equals("KQ5")){
			if(config.length() != 16) return false;
			map.put("ABM", (byteConfig[0]) & 0x01);
			map.put("IMMO",(byteConfig[0] >> 1) & 0x01);
			if(((byteConfig[0] >> 2) & 0x01) == 0x01)
			{
				map.put("EPS", (byteConfig[0] >> 2) & 0x01);
				map.put("EPS标定", (byteConfig[0] >> 2) & 0x01);
			}
			map.put("TCM", (byteConfig[0] >> 3) & 0x01);
			if(((byteConfig[0] >> 4) & 0x01) > 0)
				map.put("ABS", 0x01);
			if(((byteConfig[0] >> 5) & 0x01) == 0x01)
			{
				map.put("ESP", 1);
				map.put("ESC", 1);
				map.put("ESP标定", 1);
			}
			map.put("EPB", (byteConfig[0] >> 6) & 0x01);
			map.put("ISS", (byteConfig[0] >> 7) & 0x01);
			map.put("TPMS", (byteConfig[1] >> 0) & 0x01);
			map.put("RRM", (byteConfig[1] >> 1) & 0x01);
			map.put("AVM", (byteConfig[1] >> 2) & 0x01);
			map.put("SAM", (byteConfig[1] >> 3) & 0x01);
			map.put("APM", (byteConfig[1] >> 4) & 0x01);
			map.put("EAC", (byteConfig[1] >> 5) & 0x01);
			map.put("BCM", (byteConfig[1] >> 6) & 0x01);
			map.put("PEPS", (byteConfig[3] >> 7) & 0x01);
			//map.put("ABS", 1);
			map.put("EMS", 1);
			map.put("ICM", 1);
			int iRet = (byteConfig[7] >> 2) & 0x3F;
			if(iRet == 0)
				this.name = "Q系列国六柳机1.3";
			else if(iRet == 1)
				this.name = "Q系列国六东安1.5";
			else if(iRet == 3)
				this.name = "Q系列 2020 款东安1.5";
			else if(iRet == 4)
				this.name = "Q22L东安1.5盲窗";
			else if(iRet == 5)
				this.name = "KQ5项目单排 ";
			else if(iRet == 6)
				this.name = "KQ5项目双排  ";
			else if(iRet == 7)
				this.name = "KQ5国际项目";
			else if(iRet == 8)
				this.name = "KQ5A项目";
			else
				this.name = "";

		} else if(car.equals("KQ71EV")) {
			//int configlen = Commonfunc.CheryCmdStringToBytes(config,configbyte, config.length());
			//配置
			if(((byteConfig[0] >>> 7) & 0x01) == 0)
				map.put("VCU", 1);
			if(((byteConfig[1] >>> 0) & 0x01) == 0)
				map.put("BMS", 1);
			if(((byteConfig[1] >>> 1) & 0x01) == 0)
				map.put("MCU", 1);
			if(((byteConfig[1] >>> 2) & 0x01) == 0)
				map.put("OBC", 1);
			if(((byteConfig[1] >>> 3) & 0x01) == 0)
				map.put("ABS", 1);
			if(((byteConfig[1] >>> 4) & 0x01) == 0)
				map.put("TBOX", 1);
			if(((byteConfig[1] >>> 5) & 0x01) == 0)
				map.put("ICM", 1);
			if(((byteConfig[1] >>> 6) & 0x01) == 0)
				map.put("BCM", 1);
			if(((byteConfig[1] >>> 7) & 0x01) == 0)
				map.put("EPS", 1);
		}
		else if(car.equals("KQ51EV"))
		{
			if(((byteConfig[0] >>> 0) & 0x01) == 1)
				map.put("ABM", 1);
			if(((byteConfig[0] >>> 1) & 0x01) == 1)
				map.put("VCU", 1);
			if(((byteConfig[0] >>> 2) & 0x01) == 1)
				map.put("BMS", 1);
			if(((byteConfig[0] >>> 3) & 0x01) == 1)
				map.put("MCU", 1);
			if(((byteConfig[0] >>> 4) & 0x01) == 1)
			{
				map.put("OBC", 1);
				map.put("DCDC", 1);
			}
			if(((byteConfig[0] >>> 5) & 0x01) == 1)
			{
				map.put("BCM", 1);
				map.put("RADAR", 1);
			}
			if(((byteConfig[0] >>> 6) & 0x01) == 1)
				map.put("ICM", 1);
			if(((byteConfig[0] >>> 7) & 0x01) == 1)
				map.put("ABS", 1);
			if(((byteConfig[1] >>> 0) & 0x01) == 1)
				map.put("EPS", 1);
			if(((byteConfig[1] >>> 1) & 0x01) == 1)
			{
				map.put("TBOX", 1);
			}
			if(((byteConfig[1] >>> 2) & 0x01) == 1)
				map.put("EAC", 1);
			if(((byteConfig[1] >>> 3) & 0x01) == 1)
				map.put("RRM", 1);

			int iRet = (byteConfig[6] >> 1) & 0x1F;
			if(iRet == 0)
				this.name = "KQ53EV";
			else if(iRet == 1)
				this.name = "保留";
			else if(iRet == 2)
				this.name = "保留";
			else if(iRet == 3)
				this.name = "KQ51EV";
			iRet = (byteConfig[7] >> 3) & 0x0F;
			if(iRet == 0)
				this.name += "-主项目底盘型";
			else if(iRet == 1)
				this.name += "-主项目栏板型";
			else if(iRet == 2)
				this.name += "-主项目仓栅型";
			else if(iRet == 3)
				this.name += "-主项目厢式型";
			else
				this.name += "-保留";
		}
		else if(car.equals("KQ53EV"))
		{
			if(((byteConfig[0] >>> 0) & 0x01) == 1)
				map.put("ABM", 1);
			if(((byteConfig[0] >>> 1) & 0x01) == 1)
				map.put("VCU", 1);
			if(((byteConfig[0] >>> 2) & 0x01) == 1)
				map.put("BMS", 1);
			if(((byteConfig[0] >>> 3) & 0x01) == 1)
				map.put("MCU", 1);
			if(((byteConfig[0] >>> 4) & 0x01) == 1)
			{
				map.put("OBC", 1);
				map.put("DCDC", 1);
			}
			if(((byteConfig[0] >>> 5) & 0x01) == 1)
			{
				map.put("BCM", 1);
				map.put("RADAR", 1);
			}
			if(((byteConfig[0] >>> 6) & 0x01) == 1)
				map.put("ICM", 1);
			if(((byteConfig[0] >>> 7) & 0x01) == 1)
				map.put("ABS", 1);
			if(((byteConfig[1] >>> 0) & 0x01) == 1)
				map.put("EPS", 1);
			if(((byteConfig[1] >>> 1) & 0x01) == 1)
			{
				map.put("TBOX", 1);
			}
			if(((byteConfig[1] >>> 2) & 0x01) == 1)
				map.put("EAC", 1);
			if(((byteConfig[1] >>> 3) & 0x01) == 1)
				map.put("RRM", 1);
			//项目名称
			int iRet = (byteConfig[6] >> 1) & 0x1F;
			if(iRet == 0)
				this.name = "KQ53EV";
			else if(iRet == 1)
				this.name = "KQ55EV";
			else if(iRet == 2)
				this.name = "KQ53A";
			else if(iRet == 3)
				this.name = "KQ51EV";
			else if(iRet == 4)
				this.name = "KQ53B";
			iRet = (byteConfig[7] >> 1) & 0x1F;
			if(this.name.equals("KQ53EV"))
			{
				if(iRet == 0)
					this.name += "-KQ53EV主项目(国轩)";
				else if(iRet == 1)
					this.name += "保留";
				else if(iRet == 2)
					this.name += "-KQ53EV宁德电池组项目";
				else if(iRet == 3)
					this.name += "保留";
				iRet = (byteConfig[6] >> 1) & 0x1F;
				if(iRet == 0)
				{
					if(((byteConfig[7] >> 3)&0x03) == 0)
						this.name += "-普通版";
					else if(((byteConfig[7] >> 3)&0x03) == 1)
						this.name += "-华南版";
				}
			} else if(this.name.equals("KQ53A") || this.name.equals("KQ53B"))
			{
				map.put("ABS_CONFIG", 1);
				if(iRet == 0)
					this.name += "主项目";
				else
					this.name += "保留";
			}
			else if(this.name.equals("KQ55EV"))
			{
				this.name += "主项目";
			}
		}
		else if(car.equals("KT51EV"))
		{
			if(((byteConfig[0] >>> 0) & 0x01) == 1)
				map.put("ABM", 1);
			if(((byteConfig[0] >>> 1) & 0x01) == 1)
				map.put("VCU", 1);
			if(((byteConfig[0] >>> 2) & 0x01) == 1)
				map.put("BMS", 1);
			if(((byteConfig[0] >>> 3) & 0x01) == 1)
				map.put("MCU", 1);
			if(((byteConfig[0] >>> 4) & 0x01) == 1)
			{
				//map.put("OBC", 1);
				map.put("DCDC", 1);
			}
			if(((byteConfig[0] >>> 5) & 0x01) == 1)
			{
				map.put("BCM", 1);
				//map.put("RADAR", 1);
			}
			if(((byteConfig[0] >>> 6) & 0x01) == 1)
				map.put("ICM", 1);
			if(((byteConfig[0] >>> 7) & 0x01) == 1) {
				map.put("ABS", 1);
				map.put("ABS_CONFIG", 1);
			}
			if(((byteConfig[1] >>> 0) & 0x01) == 1)
				map.put("EPS", 1);
			if(((byteConfig[1] >>> 1) & 0x01) == 1)
			{
				map.put("TBOX", 1);
			}
			if(((byteConfig[1] >>> 2) & 0x01) == 1)
				map.put("EAC", 1);
			if(((byteConfig[1] >>> 3) & 0x01) == 1)
				map.put("RRM", 1);
			//项目名称
			int iRet = (byteConfig[6] >> 1) & 0x1F;
			if(iRet == 0)
				this.name = "KQ53EV";
			else if(iRet == 1)
				this.name = "KQ55EV";
			else if(iRet == 2)
				this.name = "KQ53A";
			else if(iRet == 3)
				this.name = "KQ51EV";
			else if(iRet == 4)
				this.name = "KQ53B";
			else if(iRet == 5)
				this.name = "KT51EV";
			iRet = (byteConfig[7] >> 1) & 0x1F;
			if(this.name.equals("KQ53EV"))
			{
				if(iRet == 0)
					this.name += "-KQ53EV主项目(国轩)";
				else if(iRet == 1)
					this.name += "保留";
				else if(iRet == 2)
					this.name += "-KQ53EV宁德电池组项目";
				else if(iRet == 3)
					this.name += "保留";
				iRet = (byteConfig[6] >> 1) & 0x1F;
				if(iRet == 0)
				{
					if(((byteConfig[7] >> 3)&0x03) == 0)
						this.name += "-普通版";
					else if(((byteConfig[7] >> 3)&0x03) == 1)
						this.name += "-华南版";
				}
			} else if(this.name.equals("KQ53A") || this.name.equals("KQ53B"))
			{
				map.put("ABS_CONFIG", 1);
				if(iRet == 0)
					this.name += "主项目";
				else
					this.name += "保留";
			}
			else if(this.name.equals("KQ55EV"))
			{
				this.name += "主项目";
			}
			else if(this.name.equals("KT51EV"))
			{
				this.name += "主项目";
			}
		}
		else if(car.equals("KQ5A"))
		{
			map.put("ICM", 1);
			map.put("EMS", 1);
			if(((byteConfig[0] >>> 0) & 0x01) == 1)
				map.put("ABM", 1);
			if(((byteConfig[0] >>> 1) & 0x01) == 1)
				map.put("IMMO", 1);
			if(((byteConfig[0] >>> 2) & 0x01) == 1)
				map.put("EPS", 1);
			if(((byteConfig[0] >>> 3) & 0x01) == 1)
				map.put("TCM", 1);
			if(((byteConfig[0] >>> 4) & 0x01) == 1)
				map.put("ABS", 1);
			if(((byteConfig[0] >>> 5) & 0x01) == 1)
				map.put("ESP", 1);
			if(((byteConfig[0] >>> 6) & 0x01) == 1)
				map.put("EPB", 1);
			if(((byteConfig[0] >>> 7) & 0x01) == 1)
				map.put("ISS", 1);
			if(((byteConfig[1] >>> 0) & 0x01) == 1)
				map.put("TPMS", 1);
			if(((byteConfig[1] >>> 1) & 0x03) == 1)
			{
				map.put("RRM", 1);
			}
			if(((byteConfig[1] >>> 6) & 0x01) == 1)
				map.put("BCM", 1);


			int iRet = (byteConfig[7] >> 2) & 0x3F;
			if(iRet == 0)
				this.name = "Q 系列国六柳机 1.3";
			else if(iRet == 1)
				this.name = "Q 系列国六东安 1.5";
			else if(iRet == 3)
				this.name = "Q 系列 2020 款东安 1.5";
			else if(iRet == 4)
				this.name = "Q22L 东安 1.5 盲窗";
			else if(iRet == 5)
				this.name = "KQ5 项目单排";
			else if(iRet == 6)
				this.name = "KQ5 项目双排";
			else if(iRet == 7)
				this.name = "KQ5 国际项目";
			else if(iRet == 8)
				this.name = "KQ5A 项目";
			else
				this.name = "预留";
		}
		else if(car.equals("KX65EV"))
		{
			map.put("ICM", 1);
			map.put("BCM", 1);
			map.put("VCU", 1);
			if(((byteConfig[0] >>> 0) & 0x01) == 1)
				map.put("ABM", 1);
			if(((byteConfig[0] >>> 1) & 0x01) == 1)
				map.put("IMMO", 1);
			if(((byteConfig[0] >>> 2) & 0x01) == 1)
				map.put("EPS", 1);
			//if(((byteConfig[0] >>> 3) & 0x01) == 1)
			//	map.put("MCU", 1);
			if(((byteConfig[0] >>> 4) & 0x01) == 1)
				map.put("ABS", 1);
			if(((byteConfig[0] >>> 5) & 0x01) == 1)
				map.put("ESP", 1);
			if(((byteConfig[0] >>> 6) & 0x01) == 1)
				map.put("EPB", 1);
			//if(((byteConfig[0] >>> 7) & 0x01) == 1)
			//	map.put("ABS", 1);
			if(((byteConfig[1] >>> 0) & 0x01) == 1)
				map.put("TPMS", 1);
			if(((byteConfig[1] >>> 1) & 0x01) == 1)
				map.put("RRM", 1);
			if(((byteConfig[1] >>> 3) & 0x01) == 1)
				map.put("SAM", 1);
			if(((byteConfig[1] >>> 4) & 0x01) == 1)
				map.put("APM", 1);
			else if(((byteConfig[7] >>> 3) & 0x01) == 1)
				map.put("APM", 2);
			if(((byteConfig[2] >>> 3) & 0x01) == 1)
				map.put("PLG", 1);
			if(((byteConfig[3] >>> 4) & 0x01) == 1)
				map.put("WPC", 1);
			if(((byteConfig[3] >>> 5) & 0x01) == 1)
				map.put("BM", 1);
			if(((byteConfig[4] >>> 7) & 0x01) == 1)
				map.put("PEPS", 1);
			if(((byteConfig[5] >>> 5) & 0x01) == 1)
				map.put("TBOX", 1);
			if(((byteConfig[5] >>> 6) & 0x01) == 1)
				map.put("TPL", 1);
			if(((byteConfig[7] >>> 2) & 0x01) == 1)
				map.put("AVM", 1);
			if(((byteConfig[7] >>> 5) & 0x01) == 1)
				map.put("BSD", 1);
			if(((byteConfig[7] >>> 6) & 0x01) == 1)
				map.put("FCW", 1);
			if(((byteConfig[5] >>> 1) & 0x0F) > 0)
				map.put("RADAR", 1);
			int iRet = (byteConfig[6] >> 4) & 0x03;
			if(iRet == 0)
				this.name = "KX63FL";
			else if(iRet == 1)
				this.name = "保留";
			else if(iRet == 2)
				this.name = "KQ53EV";
			else if(iRet == 3)
				this.name = "KX65EV";
			iRet = (byteConfig[6] >> 1) & 0x1F;
			if(iRet == 0)
			{
				if(((byteConfig[7] >> 3)&0x03) == 0)
					this.name += "-普通版";
				else if(((byteConfig[7] >> 3)&0x03) == 1)
					this.name += "-华南版";
			}
		}
		return true;
	}

	/**
	 *从cartype.ini中获取检测模块
	 */
	void initModulesForINI(){
		ArrayList<String> modules = FileReader.readList(carDirectory + "cartype.ini", cartype);
		for(int i = 0; i < modules.size(); i++){
			String module = modules.get(i);
			String name = module.substring(0,module.length() - 1);
			int num = Integer.valueOf(module.substring(module.length() - 1));
			map.put(name, num);
		}
	}

	/**
	 *从config中获取解析模块模块
	 */
	void initModulesForConfig(int index){
		String [][]modules = {//解析码模式
				{"IMMO","BCM","EMS","EPS","ABS","ESP","TCU","ICM","SDM","TPMS","MP5","PEPS","HVAC","AVM"},
				{"IMMO","BCM","EMS","EPS","ABS","ESP","TCU","ICM","SDM","TPMS","MP5","PEPS","HVAC","AVM","TBOX"},
				{"IMMO","BCM","EMS","EPS","ABS","ESP","TCU","ICM","SDM","TPMS","MP5","PEPS","HVAC","AVM","TBOX","APM"},
				{"IMMO","BCM","EMS","EPS","ABS","ESP","TCU","ICM","SDM","TPMS","MP5","PEPS","HVAC","AVM","TBOX","APM","PDC"},
		};
		for(int i = 0; i < modules[index].length; i++){
			map.put(modules[index][i], (system.charAt(i) & 0xFF) -0x30);
		}
	}


	/**
	 * 清除上一辆车信息
	 */
	public void clearCarInfo(){
		result = 0;
		map.clear();
		writeConfig.clear();
		moduleList.clear();
		moduleListFilter.clear();
		can.clear();
		Common.CanMode=0;
		map_ver_str.clear();
		Arrays.fill(pin, (byte) 0);
		Arrays.fill(esk, (byte) 0);
		Arrays.fill(tpms, (byte) 0);
	}

	public void setMap(String str,int val){
		map.put(str, val);
	}

	public int  getMap(String str){
		return map.get(str) == null ? 0 : map.get(str);
	}

	public void setWriteByte(String str, byte [] value){
		writeConfig.put(str, value);
	}
	public byte[] getWriteByte(String str){
		return writeConfig.get(str);
	}

	public void setCan(String module, Can value){
		can.put(module, value);
	}

	public Can getCan(String module){
		if(can.get(module) == null){
			FileReader.readCan(carDirectory + "can.ini", module);
		}
		return can.get(module);
	}

	public Can getCan(String module,String ex){
		if(can.get(module) == null){
			FileReader.readCan(carDirectory + "can.ini", module, ex);
		}
		return can.get(module);
	}

	/**
	 * 初始化模块列表，不包含SHW内容
	 * @param str 模块名称
	 */
	public void setModuleListFilter(String str){
		moduleListFilter.add(str);
	}

	/**
	 * 初始化模块列表，包含SHW内容
	 * @param str 模块名称
	 */
	public void setModuleList(String str){
		moduleList.add(str);
	}

	/**
	 * 获取模块列表，包含SHW内容
	 * @return 模块列表
	 */
	public ArrayList<String> getModuleList(){
		return moduleList;
	}

	/**
	 * 获取模块列表，不包含SHW内容
	 * @return 模块列表
	 */
	public ArrayList<String> getModuleListFilter(){
		return moduleListFilter;
	}


	/**
	 * 清除模块列表
	 */
	public void clearModuleList(){
		moduleList.clear();
		moduleListFilter.clear();
	}

	/**
	 * 获取工位列表
	 * @return 工位列表
	 */
	public ArrayList<String> getStationsList(){
		return stations;
	}

	/**
	 * 初始化工位列表
	 * @param str 工位名称
	 */
	public void setStationsList(String str){
		stations.add(str);
	}

	/**
	 * 清除工位列表
	 */
	public void clearStationsList(){
		stations.clear();
	}
}
